/**
 * Created with Intellij IDEA.
 * Description:
 * User: pc
 * Date: 2025-02-12
 * Time: 19:36
 */
public class Test {

    public static void main(String[] args) {
        // % 运算被模数的正负就是结果的正负
        System.out.println(10%3);//1
        System.out.println(10%-3);//1
        System.out.println(-10%3);//-1
        System.out.println(-10%-3);//-1

        //增量运算符
        int a = 10;
        long d = 100;
        a += d;//等价于 a = a + d ;
        //按理来说应该强转成 int ，不报错是因为增量运算符会帮我们进行自动类型转换
        System.out.println(a);

        //关系运算符主要有六个: == != < > <= >= ，其计算结果是 true 或者 false
        //System.out.println(3<a<5);//C会运行，Java直接报错，3<a = true,不能和 5 比较

        //逻辑运算符,&&、||、！左右都是布尔表达式，运算数要 true 或 false,结果也是 true 或 false
        //& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值

        //>>>无符号右移，左边统一补0
    }
    public static void main7(String[] args) {
        //包装类只是针对基本数据类型对应的类类型
        //引用数据类型没有包装类型
        String str = "Hello";//双引号中包含若干字符
        System.out.println(str);

        int a = 100;
        //调用String这个类型的方法
        //把 int 转成 String
        String s1 = String.valueOf(a);
        System.out.println(s1);

        //加号左右有字符串，加号就是拼接的意思
        String s2 = a + "123Xx";//100123Xx
        System.out.println(s2);

        String s3 = 10+20+"x";//先算 10+20=30 ，再来就遇到左右有字符串的 + ，变成 30 拼接 x
        String s4 = "x"+10+20;//先算拼接的 + ，左边变成 "x10" ,再算下一个拼接 + ,结果为 x1020
        System.out.println(s3);//30x
        System.out.println(s4);//x1020

        String str1 = "10086";
        //调用Integer这个类型的方法
        //把 String 转成 int
        int ret = Integer.valueOf(str1);
        System.out.println(ret);

        int ret1 = Integer.parseInt(str1);
        System.out.println(ret1);

    }
    public static void main6(String[] args) {
        int a = 10;
        long b = 20;
        int c = (int)(a+b);//等号右边是 long 类型
        long d = a+b;

        //不同类型的数据之间相互运算时，数据类型小的会被提升到数据类型大的

        byte b1 = 125;
        byte b2 = 123;
        byte b3 = (byte)(b1+b2);//对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
        //等式右边是 int 类型，需要强转为 byte 类型
        System.out.println(b3);//-8
        int b4 = b1+b2;
        System.out.println(b4);//248
    }
    public static void main5(String[] args) {
        //Java语言 强类型语言
        int a = 10;
        long b = 100L;
        //a = b 报错，不可以将 8 字节类型赋值给 4 字节类型
        b = a;//自动类型转换（隐式），可通过，可将 4 字节类型赋值给 8 字节类型
        System.out.println(b);//10
        b = 124578;
        a = (int)b;//强制类型转换（显式），可能会有数据丢失
        System.out.println(a);//124578

        //byte c1 = 256;报错,逻辑：258 超过了 byte 表示范围，默认为 int 类型字节数 > byte 类型，不满足自动类型转换条件，导致类型不兼容
        byte c1 = (byte)256;//虽然超过表示范围，但手动强转可编译
        byte c2 = 127;//未超过表示范围，可以对字面值直接赋值，直接自动类型转换

        char a1 = 10;
        //Java中，允许对字面值直接赋值，前提是不超过表示范围，超过表示范围后，就会检查
        //但是变量赋值变量会直接检查，检查满不满足自转，满足就自转，不满足就报错

        boolean b1 = true;
        /*b1 = 1;
        b1 = a;
        a = b1;*/
        //强制类型转换不一定能成功，不相干的类型不能互相转换

    }
    public static void main4(String[] args) {
        //在Java中， 真假 只有 true 和 false
        boolean flag = true;//没有明确规定占用几个字节
        System.out.println(flag);//boolean包装类型Boolean
        //boolean类型不能和任何类型进行转换
    }
    public static void main3(String[] args) {
        //char类型在Java中没有负数
        char ch = 'A';//占两个字节，和C有区别的！！！
        System.out.println(ch);
        char ch2 = '赵';//可以存一个汉字
        System.out.println(ch2);//char包装类型Character
    }
    public static void main2(String[] args){
        int a = 10;//占四个字节    -2^31 ~ (2^31)-1
        System.out.println(Integer.MAX_VALUE);//int包装类型Integer
        System.out.println(Integer.MIN_VALUE);

        long b = 10L;//占八个字节   -2^63 ~ (2^63)-1
        System.out.println(b);
        System.out.println(Long.MAX_VALUE);//long包装类型Long
        System.out.println(Long.MIN_VALUE);

        short sh = 10;//占两个字节  -2^15 ~ (2^15)-1
        System.out.println(Short.MAX_VALUE);//short包装类型Short
        System.out.println(Short.MIN_VALUE);

        byte b1 = 10;//占一个字节   -2^7 ~ (2^7)-1
        System.out.println(Byte.MAX_VALUE);//byte包装类型Byte
        System.out.println(Byte.MIN_VALUE);

        double d = 12.5;//占八个字节
        System.out.println(d);
        System.out.println(Double.MAX_VALUE);//double包装类型Double
        System.out.println(Double.MIN_VALUE);//输出非负数最小值

        float f = 12.5f;//占四个字节, f 换成 F 也可
        System.out.println(f);
        System.out.println(Float.MAX_VALUE);//float包装类型Float
        System.out.println(Float.MIN_VALUE);//输出非负数最小值

        int s = 1;
        int m = 2;
        System.out.println(s/m);//0

        double num = 1.1;
        System.out.println(num*num);//1.2100000000000002

    }
}
